package ar.edu.utn.frba.dds.aterrizar;
import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import ar.edu.utn.frba.dds.aterrizar.aerolineas.AerolineaLanchitaAdapter;
import ar.edu.utn.frba.dds.aterrizar.aerolineas.AerolineaOceanicAdapter;
import ar.edu.utn.frba.dds.aterrizar.aerolineas.AerolineasInterface;
import ar.edu.utn.frba.dds.aterrizar.busquedas.Busqueda;
import ar.edu.utn.frba.dds.aterrizar.busquedas.Vuelo;
import ar.edu.utn.frba.dds.aterrizar.usuarios.Estandar;
import ar.edu.utn.frba.dds.aterrizar.usuarios.Usuario;

import com.lanchita.AerolineaLanchita;
import com.lanchita.excepciones.EstadoErroneoException;
import com.oceanic.AerolineaOceanic;

public class Reserva 
{
	public void Reservar(AerolineasInterface aerolinea, Vuelo asiento,Usuario usuario,Date fechaExpiracion)
	{
		try
		{
			aerolinea.reservarVuelo(asiento,usuario);
		}
		catch(EstadoErroneoException ex) // contempla las 2 aerolineas
		{
			if((usuario.getTipoDeUsuario().getClass()) == Estandar.class)
			{
				SobreReserva(asiento, usuario, fechaExpiracion);
			}
		}
	}
	
	public void SobreReserva(Vuelo asiento,Usuario usuario, Date fechaExpiracion)
	{
		 SobreRecarga sr = new SobreRecarga();
		 sr.usuario = usuario;
		 sr.fechaExpiracion = fechaExpiracion;
		 asiento.getSobreRecarga().add(sr); // todo chequear aca val y ref
	}
	public void EliminarReservaExpirada(Vuelo asiento)
	{
		for (SobreRecarga sr : asiento.getSobreRecarga()) 
		{
			if(DateToCalendar(sr.fechaExpiracion).before(Calendar.getInstance()))
			{
				// sobre reserva expirada
				asiento.getSobreRecarga().remove(sr);
			}
		}
	}
    public static Calendar DateToCalendar(Date date ) 
    { 
     Calendar cal = null;
     try {   
      DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
      date = (Date)formatter.parse(date.toString()); 
      cal=Calendar.getInstance();
      cal.setTime(date);
      }
      catch (Exception e)
      {
          System.out.println("Exception :"+e);  
      }  
      return cal;
     }
}
